//UI 事件处理模块头文件

#ifndef UI_HANDLERS_H
#define UI_HANDLERS_H

#include "lvgl/lvgl.h" // 包含LVGL头文件，因为会用到lv_obj_t等

/**
 * @brief 显示通用消息框。
 * @param title 消息框标题。
 * @param message 消息框内容。
 * @param msg_panel 消息框的LVGL面板对象。
 * @param msg_title_label 消息框标题的LVGL标签对象。
 * @param msg_message_label 消息框内容的LVGL标签对象。
 */
void show_message_box(const char *title, const char *message, 
                      lv_obj_t *msg_panel, lv_obj_t *msg_title_label, 
                      lv_obj_t *msg_message_label);


/**
 * @brief 隐藏当前活动的键盘和解除文本区域的关联。
 */
static void hide_active_keyboard(void);

/**
 * @brief 显示指定的键盘并将其与文本区域关联。
 * @param keyboard 要显示的键盘对象。
 * @param textarea 要关联的文本区域对象。
 */
static void show_keyboard_for_textarea(lv_obj_t *keyboard, lv_obj_t *textarea);

/**
 * @brief 手动检查一个LVGL对象是否是另一个对象的祖先（包括自身）。
 * 此函数用于兼容LVGL 8.2版本中可能缺失的lv_obj_is_ancestor功能。
 * @param ancestor 潜在的祖先对象。
 * @param obj 要检查的对象。
 * @return 如果 ancestor 是 obj 的祖先或 obj 自身，则返回 true；否则返回 false。
 */
static bool is_ancestor_manual(lv_obj_t *ancestor, lv_obj_t *obj);

/**
 * @brief 屏幕点击事件回调函数。
 * 用于处理点击屏幕空白处时隐藏键盘和消息框的逻辑。
 * @param e LVGL事件结构体。
 */
void screen_clicked_event_cb(lv_event_t *e);

// 登录界面输入框点击事件回调
/**
 * @brief 用户名文本区域点击事件回调。
 * 点击时显示登录键盘并关联用户名文本区域。
 * @param e LVGL事件结构体。
 */
void username_textarea_clicked_cb(lv_event_t *e);

/**
 * @brief 密码文本区域点击事件回调。
 * 点击时显示登录键盘并关联密码文本区域。
 * @param e LVGL事件结构体。
 */
void password_textarea_clicked_cb(lv_event_t *e);

// 注册界面输入框点击事件回调
/**
 * @brief 注册用户名文本区域点击事件回调。
 * 点击时显示注册键盘并关联用户名文本区域。
 * @param e LVGL事件结构体。
 */
void reg_username_textarea_clicked_cb(lv_event_t *e);

/**
 * @brief 注册密码文本区域点击事件回调。
 * 点击时显示注册键盘并关联密码文本区域。
 * @param e LVGL事件结构体。
 */
void reg_password_textarea_clicked_cb(lv_event_t *e);

/**
 * @brief 重复密码文本区域点击事件回调。
 * 点击时显示注册键盘并关联重复密码文本区域。
 * @param e LVGL事件结构体。
 */
void repeat_password_textarea_clicked_cb(lv_event_t *e);

// 弹窗关闭按钮事件回调
/**
 * @brief 通用消息框关闭按钮事件回调。
 * 此函数实际上不再由按钮直接调用，但保留其定义以兼容SquareLine Studio导出。
 * @param e LVGL事件结构体。
 */
void message_box_close_btn_event_cb(lv_event_t *e);

/**
 * @brief 电影选择界面消息框关闭事件回调。
 * @param e LVGL事件结构体。
 */
void movie_selection_message_box_close_cb(lv_event_t *e);

/**
 * @brief 选座界面消息框关闭事件回调。
 * @param e LVGL事件结构体。
 */
void seat_message_box_close_cb(lv_event_t *e);

/**
 * @brief 出票界面消息框关闭事件回调。
 * @param e LVGL事件结构体。
 */
void print_ticket_message_box_close_cb(lv_event_t *e);

// 其他按钮事件回调
/**
 * @brief 登录按钮点击事件回调。
 * 处理用户登录逻辑，包括验证凭据和界面切换。
 * @param e LVGL事件结构体。
 */
void login_btn_event_cb(lv_event_t *e);

/**
 * @brief 注册按钮点击事件回调（从登录界面跳转到注册界面）。
 * @param e LVGL事件结构体。
 */
void register_btn_event_cb(lv_event_t *e);

/**
 * @brief 确认注册按钮点击事件回调。
 * 处理用户注册逻辑，包括验证输入、检查用户名和保存新用户。
 * @param e LVGL事件结构体。
 */
void confirm_register_btn_event_cb(lv_event_t *e);

/**
 * @brief 取消注册按钮点击事件回调（从注册界面返回登录界面）。
 * @param e LVGL事件结构体。
 */
void cancel_register_btn_event_cb(lv_event_t *e);

/**
 * @brief 返回登录/退出按钮点击事件回调（主功能界面）。
 * 清空登录状态并返回登录界面。
 * @param e LVGL事件结构体。
 */
void logout_btn_event_cb(lv_event_t *e);

/**
 * @brief 购票主按钮点击事件回调（主功能界面）。
 * 切换到电影选择界面。
 * @param e LVGL事件结构体。
 */
void buy_ticket_main_btn_event_cb(lv_event_t *e);

/**
 * @brief 电影选择界面返回按钮点击事件回调。
 * 返回主界面。
 * @param e LVGL事件结构体。
 */
void movie_selection_back_btn_event_cb(lv_event_t *e);

// 电影选择界面购票按钮回调
/**
 * @brief “无名之辈”电影购票按钮点击事件回调。
 * 设置选中的电影ID并显示场次选择弹窗。
 * @param e LVGL事件结构体。
 */
void buy_wuming_movie_btn_event_cb(lv_event_t *e);

/**
 * @brief “唐人街探案3”电影购票按钮点击事件回调。
 * 设置选中的电影ID并显示场次选择弹窗。
 * @param e LVGL事件结构体。
 */
void buy_tangrenjie_movie_btn_event_cb(lv_event_t *e);

/**
 * @brief “流浪地球2”电影购票按钮点击事件回调。
 * 设置选中的电影ID并显示场次选择弹窗。
 * @param e LVGL事件结构体。
 */
void buy_liulangdiqiu_movie_btn_event_cb(lv_event_t *e);

// 场次选择弹窗按钮回调
/**
 * @brief 10:30 (普通场) 场次选择按钮点击事件回调。
 * 设置选中的场次ID，隐藏弹窗并切换到选座界面。
 * @param e LVGL事件结构体。
 */
void select_session_1030_btn_event_cb(lv_event_t *e);

/**
 * @brief 14:00 (3D MAX场) 场次选择按钮点击事件回调。
 * 设置选中的场次ID，隐藏弹窗并切换到选座界面。
 * @param e LVGL事件结构体。
 */
void select_session_1400_3d_btn_event_cb(lv_event_t *e);

/**
 * @brief 18:30 (普通场) 场次选择按钮点击事件回调。
 * 设置选中的场次ID，隐藏弹窗并切换到选座界面。
 * @param e LVGL事件结构体。
 */
void select_session_1830_btn_event_cb(lv_event_t *e);

/**
 * @brief 场次选择弹窗返回按钮点击事件回调。
 * 隐藏弹窗并清空选中的电影和场次ID。
 * @param e LVGL事件结构体。
 */
void session_selection_back_btn_event_cb(lv_event_t *e);

// 选座界面相关回调
/**
 * @brief 座位按钮点击事件回调。
 * 处理座位选中/取消选中逻辑，更新已选座位列表和总价。
 * @param e LVGL事件结构体。
 */
void seat_button_clicked_cb(lv_event_t *e);

/**
 * @brief 确认购买按钮点击事件回调。
 * 更新座位图状态，保存购票记录，并显示购买成功消息。
 * @param e LVGL事件结构体。
 */
void confirm_purchase_btn_event_cb(lv_event_t *e);

/**
 * @brief 选座界面返回按钮点击事件回调。
 * 清空已选座位信息并返回电影选择界面。
 * @param e LVGL事件结构体。
 */
void seat_selection_back_btn_event_cb(lv_event_t *e);

/**
 * @brief 辅助函数：初始化选座界面的UI元素和座位图。
 * 在进入选座界面时调用。
 */
static void initialize_seat_selection_ui_elements_logic();

// 电影海报滑动容器的滚动结束事件回调
/**
 * @brief 电影海报滑动容器滚动结束事件回调。
 * 目前仅用于调试，可根据需求添加逻辑。
 * @param e LVGL事件结构体。
 */
void movie_poster_scroll_end_cb(lv_event_t *e);

// 出票界面相关回调
/**
 * @brief 出票主按钮点击事件回调（主功能界面）。
 * 检查用户登录状态，加载购票记录，并动态生成出票列表。
 * @param e LVGL事件结构体。
 */
void print_ticket_main_btn_event_cb(lv_event_t *e);

/**
 * @brief 出票界面返回按钮点击事件回调。
 * 清空票的选中状态并返回主界面。
 * @param e LVGL事件结构体。
 */
void print_ticket_back_btn_event_cb(lv_event_t *e);

/**
 * @brief 单张票选择开关事件回调。
 * 更新对应票的选中状态。
 * @param e LVGL事件结构体。
 */
void print_ticket_checkbox_event_cb(lv_event_t *e);

/**
 * @brief 确认出票按钮点击事件回调。
 * 检查是否有选中的票，显示出票动画，并在动画完成后移除已出票的记录。
 * @param e LVGL事件结构体。
 */
void confirm_print_btn_event_cb(lv_event_t *e);

/**
 * @brief 动画定时器回调函数。
 * 用于控制出票进度条和状态文本的动画。
 * @param timer LVGL定时器对象。
 */
static void print_animation_timer_cb(lv_timer_t *timer);


#endif // UI_HANDLERS_H
